GUI enhancements
IsCOBOL Evolve 2025 R2 integrates a new LAF (visual appearance and user interaction style of applications) named FlatLaf that supports different themes. Several improvements have been implemented in graphical controls: list-box and tree-view controls now support rollover properties, tab-control adds support for multiple hints and close buttons icons, now you can customize the load on demand feature of the grid control, and a new style has been added in the date-entry control.
FlatLaf
The new command line option --flatlaf <theme> for the isrun and isclient commands has been implemented to easily integrate the execution of COBOL applications with the FlatLaf Look & Feel. FlatLaf is a modern open-source cross-platform Look and Feel for Java applications. It looks almost flat, clean, simple, and elegant. FlatLaf comes with Light, Dark, IntelliJ and Darcula themes, that can be activated from the command line, for example:
isrun --flatlaf FlatLightLaf PROGNAME
iscrun --flatlaf FlatDarkLaf PROGNAME
isclient --flatlaf FlatIntelliJLaf PROGNAME
iscclient --flatlaf FlatDarculaLaf PROGNAME
To get the full benefits of this LAF, the application should be executed with the configuration
iscobol.gui.native_style=1
For best results, especially for dark themes, the program should minimally manage the colors of the window, using the J$GETFROMLAF routine to retrieve the theme color, as demonstrated with this code snippet:
           call "J$GETFROMLAF" using jget-laf-color, 
                               "Panel.background",
                               window-background-color
           call "J$GETFROMLAF" using jget-laf-color,
                               "Panel.foreground",
                               window-foreground-color  
           display standard window
                   title "LAF comparison"
                   background-color window-background-color
                   foreground-color window-foreground-color
           ...
In figures 1 through 3 you can see the same program running with different LAF options to show varying results. In Figure 1, Windows look, the program is executed without any option, which defaults to --system being used. Figure 2, FlatLightLaf shows the program running using the --flatlaf FlatLightLaf option and in Figure 3, FlatDarkLaf the program is executed with the --flatlaf FlatDarkLaf option.
Figure 1. Windows look.
Figure 2. FlatLightLaf look.
Figure 3. FlatDarkLaf look.
Rollover effect
Rollover properties are already available in the grid control to set the rollover row color -- the color that is applied to an item when the mouse hovers over it. In this release the tree-view and list-box controls have been improved and now support the rollover item color. Setting the item-rollover-color property -- or alternatively, the item-rollover-foreground-color and item-rollover-background-color properties -- in the tree-view and list-box controls will result in the item being painted with the specified colors when the mouse hovers over them.
When the mouse hovers in a header cell in the tree-view table-view, the single cell is painted with the color properties specified in the new heading-rollover-color or heading-rollover-background-color and heading-rollover-foreground-color.
The following code shows how to apply the new color properties in the tree-view and list-box controls:
              05 Tv1 tree-view
                 item-rollover-background-color rgb x#B7DFC9
                 item-rollover-foreground-color rgb x#217346
                 ...
              05 Tree-table tree-view table-view
                 item-rollover-background-color    rgb x#B7DFC9
                 item-rollover-foreground-color    rgb x#217346
                 heading-rollover-background-color rgb x#9FD5B7
                 heading-rollover-foreground-color rgb x#000000
                 ...
              05 Ls list-box
                 item-rollover-background-color rgb x#B7DFC9
                 item-rollover-foreground-color rgb x#217346
                 ...
              05 Ls-check list-box check-list
                 selection-mode lssm-multiple-interval-selection
                 item-rollover-background-color rgb x#B7DFC9
                 item-rollover-foreground-color rgb x#217346
                 ...
The running program is shown in Figure 4, Tree-view colors and Figure 5, List-box colors. On both controls, the item highlighted by the mouse pointer is now more noticeable.
Figure 4. Tree-view colors.
Figure 5. List-box colors.
Tab-Control
The tab-control has been improved by adding the option to set a specific hint for every page. When setting the new property tab-hint in conjunction with the tab-index, the specified hint is shown when the mouse hovers over the tab title area of every style of tab-control: standard, allow-container and accordion.
In addition, a new style called close-buttons adds an “x” icon on the right of every page in the tab, allowing you to manage the closing action of the page. When the user clicks on this icon, the tab page is deleted. The MSG-CLOSE event is fired, and the application can perform actions and block the action if needed.
For example, the code snippet:
           03 Tb1 tab-control
              line 2 col 2 lines 5 cells size 68 cells
              close-buttons
              ...
           03 Tb2 tab-control accordion
              line 8 col 2 lines 11 cells size 68 cells
              close-buttons
              event tb2-evt
              ...
           modify Tb1 tab-to-add ("Page1""Page2""Page 3")
           modify Tb1 tab-index 1 tab-hint "This is the hint of page 1"
           modify Tb1 tab-index 2 tab-hint "This is the hint of page 2"
           modify Tb1 tab-index 3 tab-hint "This is the hint of page 3"
           ...
       tb2-evt.
           if event-type = msg-close
              if event-data-1 = 2 and flag-edit = 1
                 set event-action to event-action-fail
              else
                 move 1 to flag-delete
           end-if.
creates two tab-controls that have the new close-buttons style, and specific page hints are applied to the first tab-control. The tb2-evt procedure is linked to the second tab-control and it performs a check to cancel the closing of a tab page if a specific condition is not met.
The result of the program running is shown in Figure 6, Tab-control enhancements.
Figure 6. Tab-control enhancements.
Grid
The grid-control has a property, LOD-THRESHOLD, that can be used to dynamically load the contents as the user scrolls in the grid, allowing a large number of records to be efficiently shown in the grid. Starting from this release, the MSG-LOAD-ON-DEMAND event has been improved by setting the EVENT-DATA-1 data item to represent the user action that triggered the loading event. The application can use this information to process the event accordingly. Additionally, setting EVENT-ACTION data item to EVENT-ACTION-COMPLETE will prevent the cursor from moving automatically if the action was already performed by code.
For example, the following code snippet:
           03 gd grid use-tab 
              lod-threshold 80
              event GD-EVT
              ...
 
       GD-EVT.
           evaluate event-type
           when msg-load-on-demand
                evaluate event-data-1
                when grlod-arrow-down-key
                when grlod-tab-key
                     perform LOAD-FEW-RECORDS
                when grlod-page-down-key
                when grlod-scroll-bar-drag
                     perform LOAD-SOME-RECORDS
                when grlod-ctrl-end-key
                     perform LOAD-ALL-RECORDS
                     modify gd cursor-y w-last-row
                     set event-action to event-action-complete
                end-evaluate
           ...
performs different actions based on the key that the user pressed. In this example, scrolling using the arrow keys or using the mouse will load a set number of records, while pressing Ctrl+End will load all the records.
Date-entry
In the date-entry control, a new style named TODAY-BUTTON-VISIBLE has been implemented to show the “Today” button in the calendar opened to choose the date.
For example, the following code snippet:
           03 date-entry today-button-visible
              line 12 col 14 size 20 cells
              ...
uses the new style, and running the program is shown in Figure 7, Date-entry Today button. When the “Today” button is pressed, the calendar closes, setting the value to the current date.
Figure 7Date-entry Today button.